Aula 2 - O Tidyverse

Escola de Métodos em Ciência Política

Frederico Bertholini

data.frame

data.frame

  • Um data.frame é o mesmo que uma tabela do SQL ou uma planilha Excel

  • seus dados provavelmente serão importados para um objeto data.frame

  • data.frame’s são listas especiais em que todos os elementos possuem o mesmo comprimento.

  • Cada elemento dessa lista pode ser pensado como uma coluna da tabela - ou como uma variável. Uso do ‘$’

  • Seu comprimento representa o número de linhas - ou seja, de observações

Estrutura de dados - data.frame

data.frame de perto

  • Como data.frames’s são listas, suas colunas podem ser de classes diferentes. Essa é a grande diferença entre data.frame’s e matrizes.

Funções úteis:

head() # Mostra as primeiras 6 linhas.
tail() # Mostra as últimas 6 linhas.
dim() # Número de linhas e de colunas.
names() # Os nomes das colunas (variáveis).
str() # Estrutura do data.frame. Mostra, entre outras coisas, as >classes de cada coluna.
cbind() # Acopla duas tabelas lado a lado.
rbind() # Empilha duas tabelas.

Pacotes

O que são pacotes

  • O R possui diversas funções já instaladas dentro da sua programação
  • Exemplos são sum(), length(), class(), c()
  • Outras, porém, devem ser instaladas para que possam ser utilizadas pelos usuários
  • A maneira com a qual instalamos novas funções, não definidas anteriormente no software, é através de pacotes
  • Pacotes concentram diversas funções para diversas demandas
    Importação de dados;
    Organização de banco de dados;
    Análises estatísticas específicas;
    Gráficos diferenciados;

O que são pacotes

  • A instalação de qualquer pacote pode ser feita por dentro do R
  • Para isso, porém, é preciso primeiro conexão com a internet, já que o R busca o novo pacote no repositório de pacotes
  • A função para instalar pacote, portanto, é install.packages()
  • O nome da nova função deve vir, primeiramente entre parenteses
  • Podemos começar instalando o pacote para importação de bases de dados: foreign
install.packages("foreign")
  • Após alguns segundos, e algumas mensagens no console, a instalação será efetivada

Ativar pacotes

  • Cada pacote, inclusive o foreign, tem uma documentação disponível na internet
  • Nessa documentação estão disponíveis as funções que o pacote possui, além do nome do seu criador
  • As função não ficam disponíveis assim que o pacote termina a instalação
  • Para ativar as funções do pacote, é preciso utilizar a função library()
library(foreign)
  • Repare, que uma vez instalado, o nome do pacote não precisa mais estar entre aspas

Ativar pacotes

  • Portanto, para começarmos o procedimento de instalação do pacote, seguimos os passos a seguir:
    Caso não esteja instalado, instalar o pacote através da função install.packages();
    Para ativar o pacote, utilizar a função library() sem as aspas no nome do pacote instalado
install.packages("foreign")

library(foreign)
  • Uma vez instalado o pacote, não é preciso instalar mais a não ser que você reinstale o R

Importação de dados

Passo a passo

  • A importação é uma das tarefas que demandam mais atenção no R
  • É preciso ter um conhecimento prévio de como sua base externa está constituída
  • Outra informação importante é a extensão do arquivo da base
  • Primeiramente, a informação que deve ser dada ao software é onde está a base - diretório de trabalho
  • A função necessária é setwd() que define o diretório da sua seção no R
  • Dentro da função, iremos inserir o local do arquivo
    Em caso de Windows, inverta as barras ou duplique;
    Não se esqueça das aspas;
setwd("/Volumes/Macintosh HD/MQCP_IPOL_2020/Slides/aula 03") # mmudando meu direto

Passo a passo

  • Esse diretório definido significa que as bases e os gráficos produzidos serão enviados para essa pasta
  • Finalmente, vamos importar as bases de dados
  • Primeiro, vamos importar a base de extensão txt com o nome baserm
  • Não é preciso de pacote para esse procedimento
lines <- readLines("dados/baserm.txt")

baserm <- read.table(text = lines, sep = '\t')
  • Repare que definimos a base dentro das aspas e com a extensão
  • Na segunda linha, o primeiro argumento é o texto, o segundo argumento trata de como os dados estão separados, geralmente txt vem separado assim

Passo a passo

  • No pacote foreign, a forma mais genérica de importação da base é o read.table()
  • Entretanto, o pacote apresenta uma série de especialidades, a depender da extensão em questão
  • Para CSV, vimos que tem a read.csv(). Já para dta, base de origem do stata, temos a função read.dta()
  • O pacote foreign não possui a extensão xlsx e xls, extensão muito encontrada e comum entre as bases de dados disponíveis
  • Para isso, vamos instalar um novo pacote readxl
install.packages("readxl")
  • Esse pacote disponibiliza as funções read_xls() e read_xlsx()

Passo a passo

  • Vamos ativar as funções disponíveis no pacote readxl com a função library()
library(readxl)
  • Vamos importar a base controle_cgu_municípios.xlsx
cgu <- 
read_xlsx("dados/controle_cgu_municípios.xlsx")
  • Repare que acessamos apenas a primeira página da base
  • Para acessarmos a segunda páginas, utilizamos o argumento sheet=2
cgu <- 
read_xlsx("dados/controle_cgu_municípios.xlsx", 
sheet = 2)
  • Alguns sinais de alerta surgem, porém não se trata de erro

Importação por pacote

  • Por fim, podemos importar dados através de pacotes
  • Após ativar o pacote “ElectionsBR”, a função legend_fed() fica disponível para a importação
  • Como toda a função, ou quase todas, possui argumentos importantes:
    • ‘year =’ se refere ao ano de extração
    • ‘uf =’ se refere à UF

Importação

  • Vamos começar importando dados de coalizões pré-eleitorais (coligações) do DF em 2018, nos retornando um objeto em ‘tbl_df’ e data frame
library(electionsBR)
leg_df_2018 <- legend_fed(year = 2018,uf="DF")

  |                                                                            
  |                                                                      |   0%
  |                                                                            
  |==                                                                    |   3%
  |                                                                            
  |===                                                                   |   4%
  |                                                                            
  |======                                                                |   9%
  |                                                                            
  |=========                                                             |  12%
  |                                                                            
  |===========                                                           |  16%
  |                                                                            
  |==============                                                        |  21%
  |                                                                            
  |===============                                                       |  22%
  |                                                                            
  |==================                                                    |  26%
  |                                                                            
  |====================                                                  |  29%
  |                                                                            
  |======================                                                |  32%
  |                                                                            
  |=========================                                             |  35%
  |                                                                            
  |===========================                                           |  39%
  |                                                                            
  |================================                                      |  45%
  |                                                                            
  |==================================                                    |  48%
  |                                                                            
  |====================================                                  |  52%
  |                                                                            
  |=========================================                             |  58%
  |                                                                            
  |=========================================                             |  59%
  |                                                                            
  |============================================                          |  62%
  |                                                                            
  |==============================================                        |  66%
  |                                                                            
  |================================================                      |  69%
  |                                                                            
  |==================================================                    |  72%
  |                                                                            
  |=====================================================                 |  75%
  |                                                                            
  |=========================================================             |  82%
  |                                                                            
  |==================================================================    |  94%
  |                                                                            
  |======================================================================| 100%
  - Provavelmente, demorará alguns segundos, até minutos, para a importação
  - Além disso, essa forma **demanda acesso à internet**

Visualizando a base

  • Primeira coisa importante de se informar é a classe desses objetos
  • Temos 3 objetos: baserm, cgu e leg_df_2018
class(baserm)
[1] "data.frame"
class(cgu)
[1] "tbl_df"     "tbl"        "data.frame"
class(leg_df_2018)
[1] "tbl_df"     "tbl"        "data.frame"

Visualizando a base

  • Uma visão completa da base é o comando View()
  • Entretanto, cuidado, dependendo do tamanho da base, podemos travar o software
View(leg_df_2018)
  • Repare no V maiúsculo, lembre-se que o R é bastante sensível na sua linguagem
  • O View() abre uma nova aba com a base no formato de grade
  • Podemos, assim, visualizar a base de dados na forma mais intuitiva

Visualizando a base

  • Porém, para bases grandes, sabemos que é grande demais para sua visualização ser feita através do View()
  • Algumas funções podem nos ajudar nessa tarefa
  • A primeira é o dim, que as dimensões da base
dim(leg_df_2018)
[1] 251  23
  • O primeiro valor sempre retrata o número de linhas, ou observações, enquanto o segundo valor apresenta o número de colunas, ou variáveis
  • As funções ncol() e length() também fazem isso

Visualizando a base

  • Outra função importante na visualização de bases de dados é a lista de nomes
  • A função names() descreve as variáveis presentes na base
  • Isso facilita no momento de selecionar as variáveis que entrarão na análise de vocês
names(leg_df_2018)
 [1] "DT_GERACAO"              "HH_GERACAO"             
 [3] "ANO_ELEICAO"             "CD_TIPO_ELEICAO"        
 [5] "NM_TIPO_ELEICAO"         "NR_TURNO"               
 [7] "CD_ELEICAO"              "DS_ELEICAO"             
 [9] "DT_ELEICAO"              "SG_UF"                  
[11] "SG_UE"                   "NM_UE"                  
[13] "CD_CARGO"                "DS_CARGO"               
[15] "TP_AGREMIACAO"           "NR_PARTIDO"             
[17] "SG_PARTIDO"              "NM_PARTIDO"             
[19] "SQ_COLIGACAO"            "NM_COLIGACAO"           
[21] "DS_COMPOSICAO_COLIGACAO" "CD_SITUACAO_LEGENDA"    
[23] "DS_SITUACAO"            

Visualizando a base - str()

  • Outra função possível é o str()
  • Essa função apresenta o nome das variáveis, a classe de cada uma delas e os primeiros valores
str(leg_df_2018)
tibble [251 × 23] (S3: tbl_df/tbl/data.frame)
 $ DT_GERACAO             : chr [1:251] "03/03/2024" "03/03/2024" "03/03/2024" "03/03/2024" ...
 $ HH_GERACAO             : 'hms' num [1:251] 11:01:19 11:01:19 11:01:19 11:01:19 ...
  ..- attr(*, "units")= chr "secs"
 $ ANO_ELEICAO            : num [1:251] 2018 2018 2018 2018 2018 ...
 $ CD_TIPO_ELEICAO        : num [1:251] 2 2 2 2 2 2 2 2 2 2 ...
 $ NM_TIPO_ELEICAO        : chr [1:251] "ELEIÇÃO ORDINÁRIA" "ELEIÇÃO ORDINÁRIA" "ELEIÇÃO ORDINÁRIA" "ELEIÇÃO ORDINÁRIA" ...
 $ NR_TURNO               : num [1:251] 1 1 1 1 1 1 1 1 1 1 ...
 $ CD_ELEICAO             : num [1:251] 297 297 297 297 297 297 297 297 297 297 ...
 $ DS_ELEICAO             : chr [1:251] "Eleições Gerais Estaduais 2018" "Eleições Gerais Estaduais 2018" "Eleições Gerais Estaduais 2018" "Eleições Gerais Estaduais 2018" ...
 $ DT_ELEICAO             : chr [1:251] "07/10/2018" "07/10/2018" "07/10/2018" "07/10/2018" ...
 $ SG_UF                  : chr [1:251] "DF" "DF" "DF" "DF" ...
 $ SG_UE                  : chr [1:251] "DF" "DF" "DF" "DF" ...
 $ NM_UE                  : chr [1:251] "DISTRITO FEDERAL" "DISTRITO FEDERAL" "DISTRITO FEDERAL" "DISTRITO FEDERAL" ...
 $ CD_CARGO               : num [1:251] 8 5 5 10 8 4 5 4 9 5 ...
 $ DS_CARGO               : chr [1:251] "DEPUTADO DISTRITAL" "SENADOR" "SENADOR" "2º SUPLENTE" ...
 $ TP_AGREMIACAO          : chr [1:251] "COLIGAÇÃO" "COLIGAÇÃO" "COLIGAÇÃO" "COLIGAÇÃO" ...
 $ NR_PARTIDO             : num [1:251] 21 90 54 70 28 36 77 28 14 23 ...
 $ SG_PARTIDO             : chr [1:251] "PCB" "PROS" "PPL" "AVANTE" ...
 $ NM_PARTIDO             : chr [1:251] "PARTIDO COMUNISTA BRASILEIRO" "PARTIDO REPUBLICANO DA ORDEM SOCIAL" "PARTIDO PÁTRIA LIVRE" "AVANTE" ...
 $ SQ_COLIGACAO           : num [1:251] 7e+10 7e+10 7e+10 7e+10 7e+10 ...
 $ NM_COLIGACAO           : chr [1:251] "ELAS POR NÓS: SEM MEDO DE MUDAR O DF" "JUNTOS DE VOCÊ" "PRA FAZER A DIFERENÇA" "PRA FAZER A DIFERENÇA" ...
 $ DS_COMPOSICAO_COLIGACAO: chr [1:251] "PSOL / PCB" "PROS / PTB / PHS / PATRIOTA / PMN / PTC / PMB" "MDB / PP / AVANTE / PSL / PPL" "MDB / PP / AVANTE / PSL / PPL" ...
 $ CD_SITUACAO_LEGENDA    : chr [1:251] "D" "D" "D" "D" ...
 $ DS_SITUACAO            : chr [1:251] "DEFERIDO" "DEFERIDO" "DEFERIDO" "DEFERIDO" ...
 - attr(*, ".internal.selfref")=<externalptr> 

Visualizando a base - head()

  • Finalmente, a função head() e tail()
  • A primeira função apresenta os primeiros valores de uma base de dados
head(leg_df_2018,2)
# A tibble: 2 × 23
  DT_GERACAO HH_GERACAO ANO_ELEICAO CD_TIPO_ELEICAO NM_TIPO_ELEICAO   NR_TURNO
  <chr>      <time>           <dbl>           <dbl> <chr>                <dbl>
1 03/03/2024 11:01:19          2018               2 ELEIÇÃO ORDINÁRIA        1
2 03/03/2024 11:01:19          2018               2 ELEIÇÃO ORDINÁRIA        1
# ℹ 17 more variables: CD_ELEICAO <dbl>, DS_ELEICAO <chr>, DT_ELEICAO <chr>,
#   SG_UF <chr>, SG_UE <chr>, NM_UE <chr>, CD_CARGO <dbl>, DS_CARGO <chr>,
#   TP_AGREMIACAO <chr>, NR_PARTIDO <dbl>, SG_PARTIDO <chr>, NM_PARTIDO <chr>,
#   SQ_COLIGACAO <dbl>, NM_COLIGACAO <chr>, DS_COMPOSICAO_COLIGACAO <chr>,
#   CD_SITUACAO_LEGENDA <chr>, DS_SITUACAO <chr>
  • O segundo argumento serve para indicar quantas linhas serão apresentadas

Visualizando a base - head()

  • Tail(), por outro lado, apresenta os últimos valores de uma base de dados
tail(leg_df_2018,2)
# A tibble: 2 × 23
  DT_GERACAO HH_GERACAO ANO_ELEICAO CD_TIPO_ELEICAO NM_TIPO_ELEICAO   NR_TURNO
  <chr>      <time>           <dbl>           <dbl> <chr>                <dbl>
1 03/03/2024 11:01:19          2018               2 ELEIÇÃO ORDINÁRIA        1
2 03/03/2024 11:01:19          2018               2 ELEIÇÃO ORDINÁRIA        1
# ℹ 17 more variables: CD_ELEICAO <dbl>, DS_ELEICAO <chr>, DT_ELEICAO <chr>,
#   SG_UF <chr>, SG_UE <chr>, NM_UE <chr>, CD_CARGO <dbl>, DS_CARGO <chr>,
#   TP_AGREMIACAO <chr>, NR_PARTIDO <dbl>, SG_PARTIDO <chr>, NM_PARTIDO <chr>,
#   SQ_COLIGACAO <dbl>, NM_COLIGACAO <chr>, DS_COMPOSICAO_COLIGACAO <chr>,
#   CD_SITUACAO_LEGENDA <chr>, DS_SITUACAO <chr>